排错指南- 如何快速debug(Stack Overflow, github issues)

Posted by 石坤 on 2019-02-05

在编程的过程中遇到报错信息是一件再普通不过的事情了, 当然这也是编程过程中很让人头疼的一件事了. 其实,只要耐心, 你会发现你遇到的所有错误,几乎在Stack Overflowgithub issues中都能找到解决方案, 关键是如何去找的问题.

首先: 调整好心态

正确认识报错: 报错不是你学习路上的拦路虎, 恰恰相反, 报错是编译器派过来帮助你解决问题的向导. 你如果无视这位向导说的话, 那你势必要走无数弯路. 反之, 你可以轻松解决问题.

了解报错的几个诱因

  • 语法错误
  • 逻辑错误
  • 开发环境问题

解决方法: 对症下药

  1. 如果是语法错误, 编译器报错类型肯定是正确的, 但是报错位置可能不靠谱. (因为语法牵 扯到相互匹配的问题). 此类问题是编程小白, 一开始最先要克服的问题, 通过一段时间的积累, 此类问题看到了立马就能条件反射式的解决
  2. 如果是逻辑错误, 最好的方式就是输出中间变量. 一步一步地排错, 错误点在哪儿.
    1. 如果是搭建网站的话, 刷新页面后, 后台会有中间变量的输出
    2. 如果是js的话, 使用alert(), 或者console.log() 可以输入中间变量
  3. 其他类问题, 比如开发环境配置. 此类问题解决办法相似. 为此博客的重点内容

解决开发类基本报错

指哪打哪型

此类问题, 一般很好解决. 报错中提示需要执行某命令, 跟着指示执行即可
举例说明:

1
2
An error occurred while installing nokogiri (1.8.4), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.8.4' --source 'https://rubygems.org/'` succeeds before bundling.

提示make sure XX, 执行提示的命令即可
gem install nokogiri
如果是Python可能有的提示是ModuleNotFoundError: No module named XX
报错module找不到, 可能是没有安装某个库.

探索型

  1. 找关键点: 从出现的报错辅助信息中, 找到最终要的关键点. warning的信息暂时可以不用理会; 遇到error 打头的信息需要注意; 如果终端是彩色的话, 红色报错信息, 一定要注意.
  2. 优先解决第一个报错点: 如果出现多个报错信息怎么办? 优先解决第一个报错点, 因为后续的报错, 可能是由于第一个报错点引起的
  3. Google关键点: 一般搜索的使用, 直接Google报错信息就行;当然也可以Google执行什么命令时或者做什么操作时报出了什么错误)
  4. 一般着重看Stack Overflow和github的页面.
    1. 进入网页, 不要着急找解决方案. 先看一页标题, 看一下提问者的情况, 是否和自己的情况类似
    2. Stack Overflow一般排名第一的回答可以解决问题, 优先找已采纳的字样(即一个绿色对勾); 或者找赞多的
    3. github issues中也提供了很多解决方案: 直接看emoji 哪个回答, 认同的人多, 就最有可能解决你的问题.
    4. 注意事项: 搜索的时候, 要记得把个性化的信息去掉, 否则搜不到想要的东西. eg. 不要包含自己文件路径; 版本号处于一个模糊地带, 有时候版本是导致问题出现的原因, 但是很多时候, 加上版本号搜索, 缩小了搜索范围, 导致可能错过解决方案. 本人的做法是: 先不加版本号, 进行搜索,找解决方案; 如果找不到, 再加上版本号, 试一下.

卡住了怎么办

一般情况, 按照上面的思路, 可以解决问题. 但是如果没有找到合适的解决方案, 怎么办?
总体来说有两个策略.

设置deadline

对于小白来说, 半个小时的排错过程, 差不多是心里承受的极限了. 记得当时学C语言的时候, 在while()后加了一个;,形成了死循环, 当时和一个室友,盯着程序看了一晚上才解决, 对于这种情况, 要学会止损. 如果浪费一个晚上, 去死盯着不能解决的bug, 能不能解决bug先不谈, 那种崩溃的心理过程, 会严重打击人的积极性和兴趣. 这不是一个好策略.

好的套路:

  1. 先独立解决, 设置半小时(或一小时,根据自己的情况定)的排错时间值, 如果超过了这个时间还没有解决, 先暂时放下.不要一个人再排错了
  2. 此时可以选择找其他同学(同事),帮助自己分析( 转换视角)
  3. 也可以记录笔记, 然后放松一下. 过一段时间(eg. 第二天), 然后再开始解决(明天的你和今天的你视角也是不同的) ,然后再开始尝试解决问题.

记笔记,整理思路

  1. 把未解决的错误, 记录下来. 把解决问题的思路和过程, 记录下来. 使用文字的方式理清自己的思路. 很多时候, 你会发现, 在记录的过程中, 突然会涌现很多解决问题的想法.
  2. 如果问题解决了, 尽量把报错信息和解决方案, 以及解决思路, 记录下来. 也可以发表到博客, 帮助自己的同时, 也帮助了别人.
  3. 注意: 记录这一步很重要, 很多人在不断地走老路,甚至于同一个错误很犯好几次, 然后每次都要重新纠结, 重新搜索答案. 如果记录下来的话, 由于印象深刻, 几乎不会犯同样类型的错误了, 即使犯了, 看看自己的笔记, 立马就能找到答案.